<?php
/**
 * CreateHashCodeBean.class.php
 * 
 * (C) 2009, tetsuya.odaka(EzoGP).
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/* 
 * ハッシュ値を戻すクラス
 * 
 * author	；t.odaka
 * date		;2009/11/25
 * 
*/

class CreateHashCodeBean {
	
	/* デフォルトのコンストラクタ */
	function __construct() {
	}

	static function getHashCode($_str, $_algos, $_len){
		require_once("Myznala/ErrorBean.class.php");
		/*
		 * 引数のチェック
		 */
		// Hashの種($_str)
		if($_str == null){
			// nullの場合、エラー。
			$_eObj = new ErrorBean();
			$_eObj->setField("root");
			$_eObj->setMessage("root must not be null.");
			return $_eObj;
		} else {
			if(is_string($_str)){
				if(strlen($_str) > 0){
				}else{
					// 長さが=0の場合、エラー。
					$_eObj = new ErrorBean();
					$_eObj->setField("root");
					$_eObj->setMessage("root must not be string.");
					return $_eObj;
				}			
			}else{
				// 文字列でない場合、エラー。
				$_eObj = new ErrorBean();
				$_eObj->setField("root");
				$_eObj->setMessage("root must not be string.");
				return $_eObj;
			}
		}

		// アルゴリズム($_algos)のチェック
		$_algos = strtolower($_algos);
		if(in_array($_algos, hash_algos())){
		}else{
			// Hashアルゴリズムとして登録されていない場合、エラー。
			$_eObj = new ErrorBean();
			$_eObj->setField("algos");
			$_eObj->setMessage("$_algos is not supported.");
			return $_eObj;
			
		}
		
		// 長さ ($_len) のチェック
		if(is_int($_len)){
			if($_len > 0){
			}else{
				// 長さが  =< 0の場合、エラー。
				$_eObj = new ErrorBean();
				$_eObj->setField("length");
				$_eObj->setMessage("length must be > 0");
				return $_eObj;
			}		
		}else{
			// 長さが  整数以外の場合、エラー。
			$_eObj = new ErrorBean();
			$_eObj->setField("length");
			$_eObj->setMessage("length must be integer");
			return $_eObj;
		}
		
		// 指定ユーザーIDでHASH変換する。HASH変換に使用するアルゴリズムは指定されたものを
		// 使用する。HASH変換した値を文字列化して、２８文字分だけ抽出する。
		$hash = substr(pack("A*", hash($_algos, $_str)), 0, $_len);
		return $hash;
	}
}
?>